package com.example.zxd;

import java.util.Scanner;

/**
 * 灰猎犬号
 * 描述：
 * 《灰猎犬号》是一部 2020 年在 Apple TV+ 上映的战争历史片，由艾伦·史耐德执导，汤姆·汉克斯编剧。电影改编自C·S·佛雷斯特的 1955 年小说《杰出牧羊人》。影片讲述二战初期，由 37 支盟军船只组成的护航舰队在欧内斯特·克劳斯舰长率领的一艘驱逐舰指挥下，穿越险恶的北大西洋，同时还要与德国U型潜艇狼群的周旋。
 *
 * 在凶险的大西洋上，为了保护船队的安全，海军绘制了详细的海图，用于避开暗礁。在海图上，所有高于海平面的坐标都用数字 1
 *  表示，而低于海平面的坐标都用数字 0
 *  表示，上下左右相邻的一整块联通区域被认为是一座暗礁。
 *
 * 现在，你需要统计海图上一共有几座暗礁，以便更好地保护船队的安全。
 *
 * 输入：
 * 第一行为两个整数 R
 *  和 C
 * ，分别表示海图的行数和列数，题目保证，1≤R,C≤1000
 * 。
 *
 * 接下来 R
 *  行，每行 C
 *  个数字 0
 *  或 1
 * ，表示海图的具体内容。1
 *  表示当前坐标高于海平面，0
 *  表示低于海平面。
 *
 * 输出：
 * 输出一个整数，表示海图上一共有几座暗礁。
 *
 * 样例输入：
 * 6 8
 * 1 0 0 0 0 1 0 1
 * 1 1 0 0 0 0 0 1
 * 1 1 1 0 0 0 0 1
 * 0 0 0 0 0 0 0 1
 * 1 0 0 0 1 0 0 1
 * 1 0 0 1 0 0 0 1
 * 样例输出：
 * 6
 * 注释：
 * 题目保证，对于 20%
 *  的数据，R=1
 * 。
 *
 * 题目保证，对于 40%
 *  的数据，所有暗礁仅由 1
 *  个区块构成。
 *
 * 题目保证，对于 40%
 *  的数据，R,C≤3
 * 。
 *
 * 题目保证，对于 100%
 *  的数据，1≤R,C≤1000
 * ，所有暗礁至多由 48
 *  个区块构成。
 * @author: scarborough
 * @datetime: 2025/3/20 - 13:23
 * @status: AC
 */
public class PROB1032 {
    static int[] xArr = {0, 0, -1, 1};
    static int[] yArr = {-1, 1, 0, 0};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int r = sc.nextInt();
        int c = sc.nextInt();
        int[][] arr = new int[r][c];
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                arr[i][j] = sc.nextInt();
            }
        }

        int res = 0;
        int[][] visited = new int[r][c];
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                if(visited[i][j] == 0 && arr[i][j] == 1) {
                    dfs(i, j, r, c,visited,arr);
                    res++;
                }
            }
        }
        System.out.println(res);
    }

    private static void dfs(int i, int j, int r, int c, int[][] visited, int[][] arr) {
        visited[i][j] = 1;
        for (int k = 0; k < 4; k++) {
            int x = i + xArr[k];
            int y = j + yArr[k];
            if(x >= 0 && x < r && y >=0 && y < c && arr[x][y] == 1 && visited[x][y] != 1) {
                dfs(x, y, r, c, visited, arr);
            }
        }
    }
}
